package com.cgsd.heyu.api;

import com.cgsd.heyu.common.UserModeConfig;
import com.cgsd.heyu.entity.AdContentEntity;
import com.cgsd.heyu.entity.AppUpdateEntity;
import com.cgsd.heyu.entity.BannerEntity;
import com.cgsd.heyu.entity.CashOutAccountEntity;
import com.cgsd.heyu.entity.CashOutEntity;
import com.cgsd.heyu.entity.CashOutProductEntity;
import com.cgsd.heyu.entity.ConfigEntity;
import com.cgsd.heyu.entity.DefaultAvatarEntity;
import com.cgsd.heyu.entity.FlowerInfoEntity;
import com.cgsd.heyu.entity.IntegralEntity;
import com.cgsd.heyu.entity.PayEntity;
import com.cgsd.heyu.entity.RewardEntity;
import com.cgsd.heyu.entity.TaskEntity;
import com.cgsd.heyu.entity.TeamEntity;
import com.cgsd.heyu.entity.UploadTokenEntity;
import com.cgsd.heyu.entity.VideoEntity;
import com.cgsd.heyu.entity.VideoRewordResult;
import com.cgsd.heyu.entity.VipEntity;
import com.cgsd.heyu.entity.VipProductEntity;
import com.cgsd.heyu.http.BaseResponse;
import com.cgsd.heyu.ui.task.vo.DoTaskDetailVo;
import com.cgsd.heyu.ui.task.vo.EditStepTwoVo;
import com.cgsd.heyu.ui.task.vo.EditThreeVo;
import com.cgsd.heyu.ui.task.vo.MyTaskVo;
import com.cgsd.heyu.ui.task.vo.PayTypeVo;
import com.cgsd.heyu.ui.task.vo.PublishDetailVo;
import com.cgsd.heyu.ui.task.vo.StepOneVo;
import com.cgsd.heyu.ui.task.vo.TaskDetailVo;
import com.cgsd.heyu.ui.task.vo.TaskListVo;

import java.util.List;

import io.reactivex.Observable;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.POST;

/**
 * @author xiaoxing
 * Created by Administrator on 2018/3/23.
 * 所有接口
 */

public interface ApiService {
    /**
     * 登录
     */
    String LOGIN = "/user-service/login/v1/userLoginPassword";
    /**
     * 登录/注册
     */
    String REGISTER = "/user-service/login/v1/verificationCode";
    /**
     * 修改密码
     */
    String UPDATE_PASSWORD = "/user-service/login/v1/updatePassword";
    /**
     * 获取手机验证码
     */
    String PHONE_CODE = "/user-service/common/v1/sendMessageCode";
    /**
     * 修改用户头像
     */
    String UPDATE_AVATAR = "/user-service/userInfo/v1/updateUserHeadImgByUserId";
    /**
     * 修改性格
     */
    String UPDATE_SEX = "/user-service/userInfo/v1/updateUserGenderByUserId";
    /**
     * 修改昵称
     */
    String UPDATE_NICKNAME = "/user-service/userInfo/v1/updateUserNickNameByUserId";
    /**
     * 查询用户信息
     */
    String USER_INFO = "/user-service/userInfo/v1/getUserInfoByUserId";
    /**
     * 退出登录
     */
    String SIGN_OUT = "/user-service/logOut/v1/logOut";
    /**
     * 注销账号
     */
    String LOGOUT = "/user-service/logOut/v1/cancelAccount";
    /**
     * 更具业务类型type查询系统业务设置
     * 1002    业务开关（启动页开屏广告开关，积分提现开关，第三方登录开关，今日任务开关）；
     * 1004    客服微信号，粉丝QQ群；
     * 1005    分发页链接，ios，安卓下载链接，分发页文案提示
     * 1007    查询捐助奖励文案；
     * 1009    捐赠门槛列表
     * 1006    获得积分数配置（分享获得的积分数量，分享多少次可获积分，每日分享获得积分的次数，新用户获取积分数量，草根时代被推荐获得积分数量，每日发草根时代获得积分数量）
     */
    String CONFIG_INFO = "/sys-setting-service/sysSetting/v1/getSysSettingForType";
    /**
     * 获取文件上传token
     */
    String UPLOAD_TOKEN = "/sys-setting-service/sysFile/v1/getUploadFileToken";
    /**
     * 问题反馈
     */
    String FEED_BACK = "/user-service/feedback/v1/questionFeedback";
    /**
     * 查询公告列表
     */
    String NOTICE_LIST = "/sys-setting-service/notice/v1/getNoticeSettingList";
    //查询今日任务列表
    String TODAY_TASK = "/user-service/task/v1/getTaskSettingList";
    //查询用户积分信息
    String FLOWER_INFO = "/user-service/flower/v1/getUserFlowerAccount";
    /**
     * 根据设置Key获取系统业务设置
     */
    String OTHER_CONFIG = "/sys-setting-service/sysSetting/v1/getSysSettingForKey";
    /**
     * banner
     */
    String BANNER_TYPE = "/sys-setting-service/bannerSetting/v1/getBannerSettingList";
    /**
     * 广告接口
     */
    String AD_CONTENT = "/sys-setting-service/advertising/v1/getAdvertisingSettingForType";
    /**
     * 任务奖励
     */
    String TASK_REWORD = "/user-service/task/v1/awardUserFlower";
    // TODO: 2021/4/5
    String LOOK_TASK_REWARD = "/api/v1/task/awardUserFlower";

    /**
     * app升级
     */
    String APP_UPDATE = "/sys-setting-service/appSetting/v1/getSetting";
    /**
     * 用户默认头像
     */
    String USER_AVATAR = "/user-service/userInfo/v1/getUserDefaultHeadSettingList";
    /**
     * 获取我的团队人数
     */
    String TEAM_PERSON_NUMBER = "/user-service/userInfo/v1/getUserTeam";

    /**
     * 获取我的直推用户列表
     */
    String RECOMMEND_USER_LIST = "/user-service/userInfo/v1/getRecommendUserList";
    /**
     * 视频列表
     */
    String VIDEO_LIST = "/user-service/video/v1/videoList";
    /**
     * 统计视频
     */
    String STATISTICS_VIDEO_DATA = "/user-service/video/v1/editVideoPlayNum";
    /**
     * 举报
     */
    String REPORT = "/user-service/feedback/v1/userReport";
    /**
     * 提现产品列表
     */
    String CASH_OUT_PRODUCT = "/user-service/withdrawal/v1/getWithdrawAmountSettingList";
    /**
     * 提现账号绑定
     */
    String CASH_OUT_BIND_ACCOUNT = "/user-service/withdrawal/v1/saveUserWithdrawAccount";
    /**
     * 提现账户信息
     */
    String CASH_OUT_ACCOUNT_INFO = "/user-service/withdrawal/v1/getWithdrawAccount";
    /**
     * 提现
     */
    String CASH_OUT = "/user-service/withdrawal/v1/userWithdraw";
    // TODO: 2021/4/5
    String USER_CAST="/api/v1/withdrawal/userWithdraw";

    /**
     * 提现记录
     */
    String CASH_OUT_RECORD = "/user-service/withdrawal/v1/getUserWithdrawRecordList";
    /**
     * 购买vip的产品
     */
    String VIP_PRODUCT = "/user-service/vip/v1/getVipPriceSettingList";
    /**
     * 支付包支付
     */
    String VIP_ALIPAY_PAY = "/user-service/pay/v1/aliPay";
    /**
     * 积分流水记录
     */
    String INTEGRAL_RECORD = "/user-service/flower/v1/getFlowerAccountFowRecordList";
    /**
     * 看视频奖励
     */
    String VIDEO_REWARD = "/user-service/task/v1/browseVideoAwardFlower";
    // TODO: 2021/4/5   看任务奖励
    String LOOK_VIDEO_REWARD = "/api/v1/task/browseVideoAwardFlower";

    /**
     * 视频列表 广告奖励
     */
    String VIDEO_LIST_AD_REWARD="/user-service/task/v1/browseAdAwardFlower";

    /**
     * ad 视频广告
     * @param route
     * @return
     */
    @POST(VIDEO_LIST_AD_REWARD)
    Observable<BaseResponse<RewardEntity>> adVideoReward(@Body RequestBody route);


    /**
     * 登录
     *
     * @param route
     * @return
     */
    @POST(LOGIN)
    Observable<BaseResponse<UserModeConfig>> login(@Body RequestBody route);

    /**
     * 注册
     *
     * @param route
     * @return
     */
    @POST(REGISTER)
    Observable<BaseResponse<UserModeConfig>> register(@Body RequestBody route);

    /**
     * 修改密码
     *
     * @param route
     * @return
     */
    @POST(UPDATE_PASSWORD)
    Observable<BaseResponse<Void>> updatePassword(@Body RequestBody route);

    /**
     * 获取验证码
     *
     * @param route
     * @return
     */
    @POST(PHONE_CODE)
    Observable<BaseResponse<Void>> getPhoneCode(@Body RequestBody route);

    /**
     * 修改用户头像
     *
     * @param route
     * @return
     */
    @POST(UPDATE_AVATAR)
    Observable<BaseResponse<Void>> updateImage(@Body RequestBody route);

    /**
     * 修改用户性别
     *
     * @param route
     * @return
     */
    @POST(UPDATE_SEX)
    Observable<BaseResponse<Void>> updateSex(@Body RequestBody route);

    /**
     * 修改用户昵称
     *
     * @param route
     * @return
     */
    @POST(UPDATE_NICKNAME)
    Observable<BaseResponse<Void>> updateNickName(@Body RequestBody route);

    /**
     * 获取用户数据
     *
     * @return
     */
    @POST(USER_INFO)
    Observable<BaseResponse<UserModeConfig>> getUserInfo();

    /**
     * 退出登录
     *
     * @return
     */
    @POST(SIGN_OUT)
    Observable<BaseResponse<Void>> signOut();

    /**
     * 注销账户
     *
     * @return
     */
    @POST(LOGOUT)
    Observable<BaseResponse<Void>> logout();

    /**
     * 更具类型，获取相关配置信息
     *
     * @param route
     * @return
     */
    @POST(CONFIG_INFO)
    Observable<BaseResponse<List<ConfigEntity>>> getConfigInfo(@Body RequestBody route);

    /**
     * 更具类型，获取相关配置信息
     *
     * @param route
     * @return
     */
    @POST(OTHER_CONFIG)
    Observable<BaseResponse<ConfigEntity>> getOtherConfig(@Body RequestBody route);

    /**
     * 获取七牛云上传数据token
     *
     * @param route
     * @return
     */
    @POST(UPLOAD_TOKEN)
    Observable<BaseResponse<UploadTokenEntity>> getQiniuyunToken(@Body RequestBody route);

    /**
     * 问题反馈
     *
     * @param route
     * @return
     */
    @POST(FEED_BACK)
    Observable<BaseResponse<Void>> feedBack(@Body RequestBody route);


    /**
     * 今日任务列表
     *
     * @return
     */
    @POST(TODAY_TASK)
    Observable<BaseResponse<List<TaskEntity>>> getTaskList();


    /**
     * 用户积分信息
     *
     * @param route
     * @return
     */
    @POST(FLOWER_INFO)
    Observable<BaseResponse<FlowerInfoEntity>> getFlowerInfo(@Body RequestBody route);

    /**
     * banner
     *
     * @param route
     * @return
     */
    @POST(BANNER_TYPE)
    Observable<BaseResponse<List<BannerEntity>>> getBannerType(@Body RequestBody route);

    /**
     * 广告
     *
     * @param route
     * @return
     */
    @POST(AD_CONTENT)
    Observable<BaseResponse<AdContentEntity>> getAdContent(@Body RequestBody route);

    /**
     * 任务奖励
     *
     * @param route
     * @return
     */
    //@POST(TASK_REWORD)
    @POST(LOOK_TASK_REWARD)
    Observable<BaseResponse<RewardEntity>> taskReword(@Body RequestBody route);

    /**
     * APP升级
     *
     * @param route
     * @return
     */
    @POST(APP_UPDATE)
    Observable<BaseResponse<AppUpdateEntity>> appUpdate(@Body RequestBody route);


    /**
     * 获取用户默认头像
     *
     * @return
     */
    @POST(USER_AVATAR)
    Observable<BaseResponse<List<DefaultAvatarEntity>>> getDefaultAvatar();

    /**
     * 团队人数数据
     *
     * @return
     */
    @POST(TEAM_PERSON_NUMBER)
    Observable<BaseResponse<TeamEntity>> getTeamData();

    /**
     * 获取我的直推用户列表
     *
     * @return
     */
    @POST(RECOMMEND_USER_LIST)
    Observable<BaseResponse<List<VipEntity>>> recommendUserList(@Body RequestBody route);

    /**
     * 视频列表
     *
     * @return
     */
    @POST(VIDEO_LIST)
    Observable<BaseResponse<List<VideoEntity>>> getVideoList(@Body RequestBody route);

    /**
     * 视频列表
     *
     * @return
     */
    @POST(STATISTICS_VIDEO_DATA)
    Observable<BaseResponse<Void>> statisticsVideoData(@Body RequestBody route);

    /**
     * 举报
     *
     * @param route
     * @return
     */
    @POST(REPORT)
    Observable<BaseResponse<Void>> report(@Body RequestBody route);

    /**
     * 提现产品列表
     *
     * @return
     */
    @POST(CASH_OUT_PRODUCT)
    Observable<BaseResponse<List<CashOutProductEntity>>> cashOutProductList();

    /**
     * 提现账号绑定
     *
     * @return
     */
    @POST(CASH_OUT_BIND_ACCOUNT)
    Observable<BaseResponse<Void>> cashOutBind(@Body RequestBody route);

    /**
     * 提现账号信息
     *
     * @return
     */
    @POST(CASH_OUT_ACCOUNT_INFO)
    Observable<BaseResponse<CashOutAccountEntity>> cashOutAccountInfo();

    /**
     * 提现
     *
     * @return
     */
   // @POST(CASH_OUT)
    @POST(USER_CAST)
    Observable<BaseResponse<Void>> cashOut(@Body RequestBody route);



    /**
     * 提现记录
     *
     * @return
     */
    @POST(CASH_OUT_RECORD)
    Observable<BaseResponse<List<CashOutEntity>>> cashOutRecord(@Body RequestBody route);

    /**
     * 提现产品列表
     *
     * @return
     */
    @POST(VIP_PRODUCT)
    Observable<BaseResponse<List<VipProductEntity>>> vipProductList();

    /**
     * 支付宝支付
     *
     * @return
     */
    @POST(VIP_ALIPAY_PAY)
    Observable<BaseResponse<PayEntity>> alipay(@Body RequestBody route);

    /**
     * 积分流水
     *
     * @return
     */
    @POST(INTEGRAL_RECORD)
    Observable<BaseResponse<List<IntegralEntity>>> getIntegralRecord(@Body RequestBody route);

    /**
     * 积分流水
     *
     * @return
     */
    //@POST(VIDEO_REWARD)
    @POST(LOOK_VIDEO_REWARD)
    Observable<BaseResponse<VideoRewordResult>> videoReward(@Body RequestBody route);

    //任务大厅列表
    @POST(ApiConfig.API_TASK_LIST)
    Observable<BaseResponse<TaskListVo>> getTaskList(@Body RequestBody route);

    //任务详情
    @POST(ApiConfig.API_TASK_DETAIL)
    Observable<BaseResponse<TaskDetailVo>> getTaskDetail(@Body RequestBody route);

    //我的任务
    @POST(ApiConfig.API_MY_TASK)
    Observable<BaseResponse<MyTaskVo>> getMyTask(@Body RequestBody route);

    //接收任务
    @POST(ApiConfig.API_JOIN_TASK)
    Observable<BaseResponse<Void>> joinTask(@Body RequestBody route);

    //完成任务状态
    @POST(ApiConfig.API_DO_TASK_DETAIL)
    Observable<BaseResponse<DoTaskDetailVo>> doTaskDetail(@Body RequestBody route);

    //提交任务
    @POST(ApiConfig.API_COMMIT_TASK)
//    @Headers({"Content-Type: application/json","Accept: application/json"})//需要添加头
    Observable<BaseResponse<Void>> commitTask(@Body RequestBody route);

    //悬赏主发布STEP1，获取任务步骤一基础数据
    @POST(ApiConfig.API_PUBLISH_STEP_ONE)
    Observable<BaseResponse<StepOneVo>> getStepOne(@Body RequestBody route);

    //保存步骤一数据
    @POST(ApiConfig.API_SAVE_STEP_ONE)
    Observable<BaseResponse<EditStepTwoVo>> saveStepOne(@Body RequestBody route);

    //保存步骤二数据
    @POST(ApiConfig.API_SAVE_STEP_TWO)
    Observable<BaseResponse<EditThreeVo>> saveStepTwo(@Body RequestBody route);

    //保存步骤三数据并去支付
    @POST(ApiConfig.API_SAVE_STEP_THREE_GO_PAY)
    Observable<BaseResponse<String>> saveStepThreeGoPay(@Body RequestBody route);

    //保存步骤三数据
    @POST(ApiConfig.API_SAVE_STEP_THREE)
    Observable<BaseResponse<String>> saveStepThree(@Body RequestBody route);

    //保存步骤三数据
    @POST(ApiConfig.API_GET_PAY_DATA)
    Observable<BaseResponse<String>> getPayData(@Body RequestBody route);

    //    login 测试
    @POST(ApiConfig.API_TEST_LOGIN)
    Observable<BaseResponse<String>> refreshToken(@Body RequestBody route);

    //悬赏主待审页面
    @POST(ApiConfig.API_MY_PUBLISH_DETAIL)
    Observable<BaseResponse<PublishDetailVo>> getPublishDetail(@Body RequestBody route);

    //悬赏主待审页面
    @POST(ApiConfig.API_PAUSE_STOP_TASK)
    Observable<BaseResponse<String>> pauseStopTask(@Body RequestBody route);

    //悬赏主待审页面
    @POST(ApiConfig.API_CHECK_TASK)
    Observable<BaseResponse<String>> checkTask(@Body RequestBody route);

    //获取可用支付方式
    @POST(ApiConfig.API_PAY_TYPE)
    Observable<BaseResponse<List<PayTypeVo>>> getPayType();

    //微信支付
    @POST(ApiConfig.API_VIP_WECHAT_PAY)
    Observable<BaseResponse<PayEntity>> wechatPay(@Body RequestBody route);

    //支付宝支付
    @POST(ApiConfig.API_ALI_PAY)
    Observable<BaseResponse<PayEntity>> aliPay(@Body RequestBody route);

}